package observer;

/**
 * 当前屏幕采用的显示方案
 */
public class CurrentConditionsDisplay implements Observer, DisplayElement {
    private float temperature;
    private float humidity;
    private WeatherData weatherData;

    // 通过构造器传参的方式，将“主题”传进来，直接向其注册观察者。
    public CurrentConditionsDisplay(WeatherData weatherData) {
        this.weatherData = weatherData;
        weatherData.registerObserver(this);
    }

    @Override
    public void display() {
        System.out.println("========= CurrentConditionDisplay ==========");
        System.out.printf("[temperature] %.2f\n", temperature);
        System.out.printf("[humidity] %.2f\n", humidity);
    }

    @Override
    public void update() {
        // 当气象台更新数据，通知观察者后，观察者通过 getter 方法采取 “拉” 的方式得到新数据。
        this.temperature = weatherData.getTemperature();
        this.humidity = weatherData.getHumidity();
        // 重新显示
        display();
    }
}
